package service;
/**
 * 这里主要写你的逻辑，就是你的后端逻辑
 */

import entity.User;
import uitl.Reslut;

import java.util.Arrays;

public class UserManagement {
    /**
     * 第一步：你先给个存储的空间，这里不能写死！！！
     * 第二步：你在来判断用户名有没有重复
     * 3.1：重复了返回“用户名或密码重复”
     * 3.2：判断正确就进入
     */

    //先给个数组来存储用户名
    private User[] user = {};
    //给个默认的长度
    private final int USER_LENGTH = 10;

    //再给个长度,保存已经存放的数组
    private int size = 0;

    //自己new自己给自己数组长度
    public UserManagement() {
        this.user = new User[USER_LENGTH];
    }

    //添加用户
    public Reslut addUser(User user) {
        //先判断有没有越界
        if (this.size + 1 > this.user.length) {
            /**
             * 第一步：看当前数组是否能容纳user
             * 如果数组不够存储，那就要扩容
             *
             * 怎么扩容？？？
             *      数组的长度不能改变，那就重新定义一个数组
             *      再把新数组内存地址给之前的数组就行了
             *      这就好了嘛
             */
//扩容到之前数组的1.5倍。把后面的数组给前面的数组
            Arrays.copyOf(this.user, this.user.length / 2);
        }

        //验证用户名是否已经存在
        for (int i = 0; i < this.size; i++) {
            User u = this.user[i];
            //判断用户名有没有重复，重复就返回错误信息
            if (u.getUserName().equals(user.getUserName())){
                Reslut reslut = new Reslut("用户名重复");
                return reslut;
            }
        }

        //这是保存的已经有的数组，然后给新的数组
        this.user[this.size++] = user;
        return Reslut.success();//返回操作成功
    }

    /**
     * 登录逻辑， 登录本质上就是一次查询
     * @param user
     * @return
     */
    public Reslut login(User user) {
        //第一步：遍历
        /**用size。有多少个对象就遍历多少次。
         * 如果遍历user.length次的话，你要去判断他是否为空
         *
         */
        for (int i = 0; i < this.size; i++) {
            User u = this.user[i];//把当前对象给u
            //来判断当前用户名和密码是否为空
            if (u.getUserName().equals(user.getUserName()) && u.getUserPasswored().equals(user.getUserPasswored())) {
                return Reslut.success();
            }
        }
        return new Reslut("用户名或密码错误");
    }

}
